package com.design_patterns.composite;

/**
 * @author: 李德才
 * @description:
 * @create: 2020-08-29 13:24
 **/

/**
 * 组合模式（树状结构）
 * 有时又叫作部分-整体模式，它是一种将对象组合成树状的层次结构的模式，
 * 用来表示“部分-整体”的关系，使用户对单个对象和组合对象具有一致的访问性
 */
public class Main {


    public static void main(String[] args) {
        FolderNode root = new FolderNode("根节点");

        FolderNode level1 = new FolderNode("level1");
        FileNode fileNode1 = new FileNode("file1");
        level1.addNode(fileNode1);

        FolderNode level2 = new FolderNode("level2");
        FileNode fileNode2 = new FileNode("file2");
        level2.addNode(fileNode2);

        FolderNode level1_1 = new FolderNode("level1_1");
        level1.addNode(level1_1);
        FileNode fileNode1_1 = new FileNode("file1_1");
        level1_1.addNode(fileNode1_1);

        root.addNode(level1).addNode(level2);
        printNode(root, 0);
    }


    public static void printNode(Node node, int depth) {
        for (int i = 0; i < depth; i++) {
            System.err.print("--");
        }
        node.printMe();
        if (node instanceof FolderNode) {
            for (Node n : ((FolderNode) node).getNodeList()) {
                printNode(n, depth + 1);
            }
        }
    }
}
